import mountElement from "./mountElement"
import updateNodeElement from "./updateNodeElement"
/**
 * 根据vDom创建DOM对象
 * @param {*} vDom 
 * @returns 
 */
export default function createDOMElement(vDom) {

  let newElement = null

  // 创建文本节点
  if (vDom.type === 'text') {
    newElement = document.createTextNode(vDom.props.textContent)
  }
  // 创建元素节点
  else {
    newElement = document.createElement(vDom.type)
    // 给元素添加属性
    updateNodeElement(newElement, vDom)
  }
  // 给DOM元素添加一个_vDom属性，用来存放vDom
  newElement._vDom = vDom
  // 递归创建子节点DOM
  vDom.children.forEach(child => {
    mountElement(child, newElement)
  })
  // 如果存在ref，就执行ref函数，并把element传入
  if(vDom.props && vDom.props.ref) {
    vDom.props.ref(newElement)
  }
  // 返回创建好的节点
  return newElement
}